package com.example.basic.web.service.pharmStock;


import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.basic.web.model.pharmStock.PharmStock;
import com.example.basic.web.response.PharmStockResponse;
import com.example.basic.web.response.report.StockCountResponse;

import java.util.Map;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author suntt
 * @since 2019-10-29
 */
public interface PharmStockService {

    /**
     *
     * 库存列表
     * @param queryPage  分页
     * @param searchParam 模糊搜索(遗体名称，拼音码，五笔码)
     * @param sex 性别 0-全部
     * @param pharmCode 库房编码 0-全部
     * @param zoneCode 分区编码 0-全部
     * @param depotCode 库位编码 0-全部
     * @param status 状态 0-全部 1-占用，2-空闲
     * @return
     */
    IPage<PharmStockResponse> queryList(Page<PharmStockResponse> queryPage, String searchParam, String sex, String pharmCode, String zoneCode, String depotCode, String status);

    /**
     * 待出库列表
     * @param queryPage  分页
     * @param searchParam 模糊搜索(遗体名称，拼音码，五笔码)
     * @param sex 性别 0-全部
     * @param beginTime 开始日期
     * @param endTime 结束日期
     * @return
     */
    IPage<PharmStockResponse> waitOutList(Page<PharmStockResponse> queryPage, String searchParam, String sex, String beginTime, String endTime);

    /**
     * 校验库存是否使用
     * @param pharmCode 仓库编码
     * @param zoneCode 分区编码
     * @param depotCode 库位编码
     * @return
     */
    PharmStock judgeStock(String pharmCode, String zoneCode, String depotCode);

    /**
     * 查询遗体库存信息
     * @param remainsCode 遗体编码
     * @return
     */
    PharmStock queryByRemainsCode(String remainsCode);

    /**
     * 库存信息查询
     * @param queryPage 分页
     * @param searchParam 模糊搜索(遗体名称，拼音码，五笔码)
     * @param pharmCode 库房编码 0-全部
     * @param zoneCode 分区编码 0-全部
     * @param depotCode 库位编码 0-全部
     * @return
     */
    IPage<StockCountResponse> queryStockInfo(Page<StockCountResponse> queryPage, String searchParam, String pharmCode, String zoneCode, String depotCode);

    /**
     * 库存信息统计
     *
     * @param searchParam 模糊搜索(遗体名称，拼音码，五笔码)
     * @param pharmCode   仓库编码
     * @param zoneCode    分区编码
     * @param depotCode 库位编码
     * @return
     */
    Map stockCount(String searchParam, String pharmCode, String zoneCode, String depotCode);

    /**
     * 更新库存记录
     * @param pharmStock
     * @return
     */
    PharmStock modify(PharmStock pharmStock);

    /**
     * 清空库存记录出库信息
     * @param remainsCode 遗体编码
     */
    void emptyOut(String remainsCode);

    /**
     * 新增
     * @param pharmStock
     * @return
     */
    PharmStock add(PharmStock pharmStock);
}